<template>
  <div class="import-container">
    <!-- 引入 封装好的excel导入组件 -->
    <upload-excel :on-success="success" />
  </div>
</template>

<script>
import { importEmployee } from '@/api/employees'
export default {
  name: 'ImportIndex',
  data() {
    return {
      type: this.$route.query.type
    }
  },
  methods: {
    async  success({ headers, results }) {
      // header是 头部表头的集合
      // results是实际的数据
      // [{ username: '高小山', workNumber: 1002 }]
      // [{ 姓名: '高小山’，工号： 1002 }]
      // 只有确定了用户字段关系 才能够将数据转化
      // console.log(arguments)
      // 如果是导入员工 把表格内的中文和后端要求传入的英文字符对应起来
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }
      var arr = []
      results.forEach(item => {
        // console.log(item) // 得到导入文件中的对象
        // console.log(Object.keys(item)) // 得到excel文件中的keys
        const userInfo = {}
        // 需要将每一个条数据里面的中文都换成英文
        Object.keys(item).forEach(key => {
          // key是当前的中文名 找到对应的英文名
          // console.log(key)
          // 判断含有日期格式的数据 并进行处理
          if (userRelations[key] === 'timeOfEntry' || userRelations[key] === 'correctionTime') {
            userInfo[userRelations[key]] = new Date(this.formatDate(item[key], '/')) // 只有这样, 才能入库
            return
          } else {
            userInfo[userRelations[key]] = item[key] // 将原来中文对应的值 赋值给原来英文对应的值
          }
        })
        // 最终userInfo变成了全是英文
        arr.push(userInfo)
      })
      // 发起通过excel批量导入员工的请求
      await importEmployee(arr)
      this.$message.success('导入excel成功')
      this.$router.back() // 回到上一个页面
      // 不需要更新视图吗
    },
    // 当excel中有日期格式的时候，实际转化的值为一个数字，我们需要一个方法进行转化
    formatDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      // const date = time.getDate() - 1 + ''
      const date = time.getDate() + ''
      if (format && format.length === 1) {
        return year + format + month + format + date
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>

<style scoped lang="less">

</style>
